package com.shujia

object Code06Fun {
  def main(args: Array[String]): Unit = {
    // 由于函数作为参数或返回值进行传递，那么对于不同的函数，应该使用不同的函数类型来进行标记
    //   比如对于函数来说 需要确定其 函数的参数个数 参数类型 以及返回值类型，来确定函数的类型
    val fun1: Int => Unit = fun _ // :和=之间的内容表示为函数的类型  该行是将fun 赋值给 fun1
    /*
      Int => Unit
        => 表示函数类型的标记
        => 左边表示函数的传入参数类型,当只有一个参数列表时，()可以省略，对于多个参数可以使用，进行分割
        => 右边表示函数的返回值类型

      _ 表示当前函数并不执行，而是作为一个函数的变量，代表函数的本身
     */
    val i: Int = 10
    println("===================")
    fun1(i)

    val fun3: (Int, Int) => Unit = fun2 _


    val fun5: (Int, Int) => Int = fun4

    println(fun5(2,3))

    var fun7 = fun6 _

  }


  def fun(a: Int): Unit = {
    println("有参无返回值函数，参数值为：" + a)
  }

  def fun2(a: Int, b: Int): Unit = {
    println("计算结果为：", a * b)
  }

  def fun4(a: Int, b: Int): Int = {
    a * b
  }

  def fun6(): Int = {
    println("----")
    100
  }

}
